#include <stdio.h>
#include <pthread.h>
#include <unistd.h>

void *thread_fun (void *arg)
{
    printf("分线程开始执行 \n");

    // 模拟长时间的执行
    sleep(3);
    printf("分线程sleep之后执行 \n");
    return NULL;
}

int main(int argc, char const *argv[])
{
    printf("主线程开始执行 \n");
    pthread_t pt;
    pthread_create(&pt, NULL, thread_fun, NULL);
    printf("主线程在创建分线程之后继续执行 \n");
    sleep(1); // 主线程睡眠1秒，把执行时间让给分线程
    // 取消分线程
    pthread_cancel(pt);
    void *result;
    pthread_join(pt, &result);
    if (result == PTHREAD_CANCELED)
    {
        printf("分线程被取消结束 \n");
    }
    else
    {
        printf("分线程正常执行完结束 \n");
    }
    
    printf("主线程执行结束 \n");
    return 0;
}
